home *** CD-ROM | disk | FTP | other *** search
/ Aminet 20 / Aminet 20 (1997)(GTI - Schatztruhe)[!][Aug 1997].iso / Aminet / dev / src / DICE_SharedLib.lha / Functions.c < prev    next >
C/C++ Source or Header  |  1997-06-23  |  2KB  |  103 lines

  1. //
  2. //        Example Shared Library Code
  3. //        Compiles with DICE
  4. //        
  5. //        By Wez Furlong <wez@twinklestar.demon.co.uk>
  6. //
  7. //        Based on code by Geert Uytterhoeven and Matt Dillon
  8. //
  9. //        This source was produced:    Monday 23-Jun-1997 
  10. //
  11. //        DISCLAIMER
  12. //
  13. //        Please read the code FULLY before use... I could have put ANYTHING in
  14. //        here; I may have the code format your bootdrive for example.
  15. //
  16. //        NEVER trust example code without fully understanding what it does.
  17. //
  18. //        This code comes with no warranty; I am NOT responsible for any damage
  19. //        that may ensue from its use, be it physical, mental or otherwise.
  20. //
  21. //        This code may be modified, so long as the names of myself, Geert and
  22. //        Matt are mentioned within any release or distribution produced using it,
  23. //        and a copy sent to myself.
  24. //
  25. //        This code may be redistributed freely; no profit is allowed to be made
  26. //        from its distribution.
  27. //
  28. //        This code may be included on an Aminet or Fred Fish CD.
  29. //
  30.  
  31. //        Example Functions; borrowed from the DICE example routines
  32. //
  33.  
  34. #include "example.h"
  35.  
  36. //--    Our Init function sets this up
  37.  
  38. static struct SignalSemaphore SemLock;
  39. static struct List    StrList;
  40.  
  41. //--- Prototypes
  42. //-- Note: Public Library functions MUST have the LibCall qualifier
  43.  
  44. Prototype LibCall extern void PostString(__A0 const STRPTR name);
  45. Prototype LibCall extern LONG GetString(__A0 STRPTR buf, __D0 LONG buflen);
  46. Prototype void initstuff(void);
  47.  
  48. //-- Init some stuff: called from within Init()
  49.  
  50. void initstuff(void)
  51. {
  52.     NewList(&StrList);
  53.     InitSemaphore(&SemLock);
  54. }
  55.  
  56. //-- PostString
  57. //
  58. //    Puts a string into memory for later recall
  59. //
  60.  
  61. LibCall void PostString(__A0 const STRPTR name)
  62. {
  63.     struct Node *node;
  64.  
  65.     ObtainSemaphore(&SemLock);
  66.     node = MAlloc(sizeof(struct Node) + strlen(name) + 1);
  67.     node->ln_Name = (char *)(node + 1);
  68.     strcpy(node->ln_Name, name);
  69.     AddTail(&StrList, node);
  70.     ReleaseSemaphore(&SemLock);
  71. }
  72.  
  73. //-- GetString
  74. //
  75. //    Recalls string and places it in buf
  76. //
  77.  
  78. LibCall LONG GetString(__A0 STRPTR buf, __D0 LONG buflen)
  79. {
  80.     struct Node *node;
  81.     long len;
  82.  
  83.     ObtainSemaphore(&SemLock);
  84.     if (node = RemHead(&StrList))
  85.     {
  86.         len = strlen(node->ln_Name);
  87.         strncpy(buf, node->ln_Name, buflen);
  88.         if (len >= buflen)
  89.             buf[buflen-1] = 0;
  90.         Free(node, sizeof(struct Node) + len + 1);
  91.     } 
  92.     else 
  93.     {
  94.         len = -1;
  95.         if (buflen > 0)
  96.             buf[0] = 0;
  97.     }
  98.     ReleaseSemaphore(&SemLock);
  99.     return (len);
  100. }
  101.  
  102.  
  103.